from openpyxl import Workbook
from docx import Document
import sys
import pypandoc
import os

sys.path.append("../lib")
from inner_util import get_files, try_file_path


def convert_doc_to_docx(input_file, output_file=None):
    """
    将 DOC 文件转换为 DOCX 格式

    Args:
        input_file (str): 输入的 DOC 文件路径
        output_file (str, optional): 输出的 DOCX 文件路径
    """
    try:
        # 如果没有指定输出文件名，则使用相同的文件名但扩展名为 .docx
        if output_file is None:
            output_file = os.path.splitext(input_file)[0] + ".docx"

        # 使用 pypandoc 进行转换
        output = pypandoc.convert_file(
            input_file,
            "docx",
            outputfile=output_file,
            extra_args=["--wrap=none"],  # 可选参数：不自动换行
        )

        print(f"转换成功: {input_file} -> {output_file}")
        return output_file

    except Exception as e:
        print(f"转换失败: {str(e)}")
        return None


def table_to_list(table):
    data = []
    # 去掉表头行
    for row in table.rows:
        row_data = []
        for cell in row.cells:
            row_data.append(cell.text)
        data.append(row_data)
    return data


def parse_docx(file_path):
    # 加载Word文档
    doc = Document(file_path)

    all = []
    # 遍历文档中的所有表格
    for table in doc.tables:
        print(f"发现一个表格，有{len(table.rows)}行和{len(table.columns)}列")
        one_table = table_to_list(table)
        all.extend(one_table)

        # # 遍历表格中的每一行
        # for row in table.rows:
        #     # 遍历行中的每一个单元格
        #     for cell in row.cells:
        #         print(cell.text, end="\t")  # 打印单元格内容，用制表符分隔
        #     print()  # 每行结束后换行
        # print("\n")  # 表格结束后空一行

    print(all)
    return all


def save_data(data):
    wb = Workbook()
    ws = wb.active

    # 通过行列索引写入
    for i in range(len(data)):
        for j in range(len(data[i])):
            ws.cell(row=i + 1, column=j + 1, value=data[i][j])

    wb.save(try_file_path("合并_参会名单.xlsx"))


def main():
    files = get_files(sys.argv[1])
    print(files)

    all_data = []
    for f in files:
        all_data.append([])
        all_data.append([f])
        one = parse_docx(f)
        all_data.extend(one)

    save_data(all_data)


if __name__ == "__main__":
    main()
